gnome-remote-desktop 配置
·
Table of Contents
命令行查看配置
gsettings list-recursively | grep remote-desktop
systemctl --user stop gnome-remote-desktop
# 但是我尝试了多种方法最后生成的都是openssh格式的私钥key???!!!
# 生成新的密钥(确保是PEM格式)
openssl genrsa -out ~/.local/share/gnome-remote-desktop/rdp-tls.key 2048
# 使用 openssl 明确生成 PEM 格式
openssl genpkey -algorithm RSA -out ~/.local/share/gnome-remote-desktop/rdp-tls.key -pkeyopt rsa_keygen_bits:2048
# 生成证书
openssl req -new -x509 -key ~/.local/share/gnome-remote-desktop/rdp-tls.key -out ~/.local/share/gnome-remote-desktop/rdp-tls.crt -days 3650 -subj "/C=CN/ST=State/L=City/O=Organization/CN=$(hostname)"
# 设置密钥和证书(如果证书已经设置过,可以不用再设置,但为了确保,可以重新设置一次)
grdctl set-tls-key ~/.local/share/gnome-remote-desktop/rdp-tls.key
grdctl set-tls-cert ~/.local/share/gnome-remote-desktop/rdp-tls.crt
grdctl status
grdctl --help
systemctl --user start gnome-remote-desktop
# 如果反复遇到 RDP 证书问题,最省时省力的方式是关闭 RDP,启用 VNC:
gsettings set org.gnome.desktop.remote-desktop.rdp enabled false
gsettings set org.gnome.desktop.remote-desktop.vnc enabled true
echo -n 'yourpassword' | gsettings set org.gnome.desktop.remote-desktop.vnc password "$(base64 -w 0)"
systemctl --user restart gnome-remote-desktop
# 禁用屏幕自动锁定
gsettings set org.gnome.desktop.screensaver lock-enabled false
# 设置屏幕空白时间为从不
gsettings set org.gnome.desktop.session idle-delay 0
gsettings set org.gnome.desktop.screensaver idle-activation-enabled false
# 禁用自动挂起
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'
# GNOME 45+ 的 gnome-remote-desktop 在 RDP 模式下不会主动防止系统挂起。 因此你还需要告诉 logind 保持唤醒状态:
# 这可以防止合盖(或外接显示器断开)时触发挂起。
sudo sed -i 's/^#\?HandleLidSwitch=.*/HandleLidSwitch=ignore/' /etc/systemd/logind.conf
sudo sed -i 's/^#\?HandleLidSwitchDocked=.*/HandleLidSwitchDocked=ignore/' /etc/systemd/logind.conf
sudo systemctl restart systemd-logind
其他资料的补充
# 以目标用户身份设置 GNOME 配置(关键!) # 切换到你的桌面用户(例如 peter)
sudo -u peter dbus-run-session -- bash
# dbus-run-session 确保 D-Bus 会话可用,否则 gsettings 可能失效。
# 禁用自动锁屏
gsettings set org.gnome.desktop.screensaver lock-enabled false
# 禁用屏幕休眠(设为 0 表示永不)
gsettings set org.gnome.desktop.session idle-delay 0
# 禁用显示器自动关闭(设为 0 表示永不)
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type 'nothing'
gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-battery-type 'nothing'
# 禁用屏幕变黑(DPMS)
gsettings set org.gnome.desktop.session idle-delay 0
gsettings set org.gnome.settings-daemon.plugins.power idle-dim false
sudo tee /etc/systemd/logind.conf.d/90-disable-suspend.conf <<EOF
[Login]
HandleLidSwitch=ignore
HandleLidSwitchExternalPower=ignore
HandleLidSwitchDocked=ignore
IdleAction=ignore
IdleActionSec=0
EOF
sudo systemctl restart systemd-logind
# GNOME 会检测是否有“活跃会话”。如果你使用的是 GNOME 内置远程桌面(gnome-remote-desktop),它默认应被视为活跃。但为保险起见: 允许远程会话阻止空闲
gsettings set org.gnome.mutter idle-monitor false
# 系统级别的阻止系统挂起: 遇到过问题 sleep.target 会刷大量warning日志
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# 程序运行时临时阻止系统挂起
systemd-inhibit --what=idle:sleep:shutdown --who="Reason" --why="Explanation" /path/to/command
systemd-inhibit --what=idle:sleep:shutdown --who="Keep up" --why="Preventing sleep" /usr/bin/htop
systemd-inhibit --list
ssh登录后的全流程配置
USERNAME=peter
UID=$(id -u $USERNAME)
export XDG_RUNTIME_DIR=/run/user/$UID
export DBUS_SESSION_BUS_ADDRESS=unix:path=$XDG_RUNTIME_DIR/bus
# 安装(Ubuntu/Debian)
sudo apt update
sudo apt install -y gnome-remote-desktop winpr-utils
# 生成证书并配置
sudo -u $USERNAME -- sh -c 'mkdir -p ~/.local/share/gnome-remote-desktop && \
winpr-makecert -silent -rdp -path ~/.local/share/gnome-remote-desktop rdp-tls'
sudo -u $USERNAME -- bash -c '
grdctl rdp set-tls-key ~/.local/share/gnome-remote-desktop/rdp-tls.key
grdctl rdp set-tls-cert ~/.local/share/gnome-remote-desktop/rdp-tls.crt
grdctl rdp set-credentials '"'"$USERNAME"'"' '"'"'StrongP@ssw0rd'"'"'
grdctl rdp enable
grdctl rdp disable-view-only
systemctl --user enable --now gnome-remote-desktop.service
'
修复密钥环解锁失败
- GNOME Remote Desktop(以及 grdctl)会把 RDP/VNC 凭据、TLS 证书路径 等信息加密保存到 GNOME Keyring 中。
- Keyring 是由 gnome-keyring-daemon 管理的一个加密存储,默认有一个叫 “login” 的 keyring 文件:
- 位于:~/.local/share/keyrings/login.keyring
- 加密口令:最初创建用户时的密码
- 平常在 GUI 登录时由 gnome-keyring-daemon 自动解锁。
- 但当你通过 SSH / 无图形登录时,这个 daemon 没有运行,也无法自动解锁。
删除/重建 login 密钥环(最直接)
如果你不在意旧的保存内容,可以直接删除密钥环并重新生成:
mv ~/.local/share/keyrings/login.keyring ~/.local/share/keyrings.bak
同步密码(如果你知道旧密码)
如果你确定旧密码是 “OldPass”,新密码是 “NewPass”, 可以用 GNOME Keyring 工具同步(需要临时图形环境):
seahorse
然后右键 “登录” → “更改密码”,输入旧密码 + 新密码同步。 之后 CLI 方式的 grdctl 输入新密码就能正确验证。
手动启动 gnome-keyring-daemon(SSH 环境)
eval $(gnome-keyring-daemon --start --components=secrets,pkcs11,ssh,gpg)
export GNOME_KEYRING_CONTROL
export GNOME_KEYRING_PID
export SSH_AUTH_SOCK
完全跳过 keyring(临时、测试用)
GNOME Remote Desktop 没有官方参数能跳过 keyring保存,但可以用一种“hack”方式:
# 仅限测试环境!!
export GNOME_KEYRING_CONTROL=/tmp/fake-keyring
mkdir -p $GNOME_KEYRING_CONTROL
grdctl rdp set-credentials <user> <password>
这会创建一个临时未加密 keyring 存储(适合容器或测试机), 重启后失效,但能避免“解锁密钥环”弹窗。